package com.bjpowernode.filter;

import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

import java.io.IOException;

/**
 * 接收前端的验证码，并对验证码进行验证
 */
//public class CaptchaFilter implements Filter {
//可以直接实现jakarta.servlet包下的Filter接口
//但在spring框架中，也可以直接继承OncePerRequestFilter抽象类，这个类也实现了Filter接口
@Component
public class CaptchaFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        String code = request.getParameter("captcha");
        //这里不要用toString，因为如果不是登录提交的请求，那么session中就没有验证码，这里会空指针异常
//        String sessionCode = request.getSession().getAttribute("captcha").toString();
        String sessionCode = (String)request.getSession().getAttribute("captcha");
        String requestUri = request.getRequestURI();    // /login
        //判断是否是登录请求，因为这个是校验验证码的过滤器
        if("/login".equals(requestUri)){
            //判断验证码是否正确
            if(sessionCode.equals(code)){
                //验证码正确，直接放行
                filterChain.doFilter(request,response);
            }else{
                //验证码为空或验证码不正确，重定向到登录页面
                response.sendRedirect("/toLogin");
            }
        }else{
            //不是登录请求，直接放行
            filterChain.doFilter(request,response);
        }
    }
}
